ZGlmZiAtLWdpdCBhL3ZydDJ0ZWkucGwgYi92cnQydGVpLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM3Nzg5YTgKLS0tIC9kZXYvbnVsbAorKysgYi92cnQydGVpLnBsCkBAIC0wLDAgKzEsNTQ4IEBACisjISAvdXNyL2Jpbi9wZXJsIC13CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgdnJ0MnRlaS5wbAorIyBldXJlY28KKyMgbGVpYm5pei1pbnN0aXR1dCBmdWVyIGRldXRzY2hlIHNwcmFjaGUgLyBjc2MgZmlubGFuZCBlc2JvCisjIGF1Z3VzdCAyMDI0CisjIAorIyAKKyMgdXNpbmcgWE1MOjpUd2lnICwgc2VlIGh0dHA6Ly93d3cueG1sdHdpZy5vcmcvLCBodHRwczovL21ldGFjcGFuLm9yZy9wb2QvWE1MOjpUd2lnYQorIyAKKyMgdXNhZ2U6IHNlZSBiZWxvdyB0aGUgdXNhZ2UgZnVuY3Rpb24KKyMgVXNhZ2U6ICAuL3htbDJpNS5wbCA8dnJ0eG1sZmlsZS54bWw+IDxvdXRmaWxlPgorIyAgICAgICAgIDx2cnR4bWxmaWxlPjogeG1sLWlzZWQgdnJ0IGZpbGUKKyMKKyMKKyMgVE9ETzogCisjIDEgIGluc2VydCBkdGQgc3BlYywgb3IgcmVmIHRvIFRFSQorCisjIDNhIFVQTE9BRCBpbiBHSVRIVUIKKyMgM2IgYWRkIEBoZWFkIGFuZCBAZGVwcmVsIHRvIEk1IHNvd2llIGF1Y2ggQG1zZAorIyAzYyBiZWFyYmVpdHVuZyB2b24gQGhlYWQgdW5kIEBkZXByZWwgaW4gdGVpMmtvcmFweG1sIGR1cmNoIE5pbHM/CisjIDNkIGJ1aWxkIDMwIGJpbGxpb24gY29ycHVzCisKKyMgNGEgdGFrZSBjYXJlIG9mIElEcworIyA0YiBzZWUgdG8gdGhlIHZhbHVlcyBvZiBAeG1sOmxhbmcKKyMgNSBhYmZhbmdlbiB2b24gdW5lcndhcnRldGVuIGVsZW1lbnRlbiBkaCBhbmRlcmUgYWxzIDxzZW50ZW5jZT4gdW5kIDxwYXJhZ3JhcGg+CisjIDVhIHdvcnQgcmVpaGVuZm9sZ2Ugbm9jaG1hbCBjaGVja2VuCisjIDYgY2hlY2tzIGFuZCBiYWxhbmNlcworIyA2YSBvdXRwdXQgbmFjaCBzdGRvdXQgbWFjaGVuCisjIDcgIEhvdyB0byBlbmNvZGUgS2llbGlwYW5ra2kgYW5kIE5hdGlvbmFsIExpYnJhcnkgb2YgRmlubGFuZD8gaW4gdGVpQ29ycHVzIEhlYWRlcgorIyA4ICBjb25zdHJ1Y3QgPGlkc0RvYz5zIGZvciB0aGUgbW9udGhzIChvciBnbyBmb3IgVEVJKQorIyA5ICBwYXJhbGxlbGlzYXRpb24gaW4gYmFzaCBhbmQgYXBwbGljYXRpb24gb24gc3ViIGNvcnBvcmEgb2YgS0xLCisjIDEwICByZS1pbXBsZW1lbnRhdGlvbiBvZiB0aGUgZ2F3ayBjb2RlIGluIHRoZSBwZXJsIHNjcmlwdAorIyAxMiAgcmUtaW1wbGVtZW50IGNyZWF0aW9uIG9mIHRleHQgaGVhZGVyIGZyb20geG1sIGZpbGUgaW4gYW5vdGhlciB0d2lnIC8gcGFyYW1ldHJpemUgVEVJIHZzIEk1CisKKworCisjcmVtZW1iZXIKKyNmb3JtYXR0ZWQueG1sOjEwNTYxMzogZWxlbWVudCB3OiB2YWxpZGl0eSBlcnJvciA6IE5vIGRlY2xhcmF0aW9uIGZvciBhdHRyaWJ1dGUgZGVwcmVsIG9mIGVsZW1lbnQgdworI2Zvcm1hdHRlZC54bWw6MTA1NjEzOiBlbGVtZW50IHc6IHZhbGlkaXR5IGVycm9yIDogTm8gZGVjbGFyYXRpb24gZm9yIGF0dHJpYnV0ZSBoZWFkIG9mIGVsZW1lbnQgdworCisKKyMKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBYTUw6OlR3aWc7IAordXNlIFhNTDo6R2VuZXJhdG9yICc6cHJldHR5JzsgICMgYXBwYXJlbnRseSBubyBlZmZlY3Qgd2hlbiB1c2luZyBmbHVzaCgpOworCisgCit1c2UgbG9jYWxlOyAgICAgICAgICAgICAgICAgIyBkaWVzZSBkcmVpIFplaWxlbiwgZGFtaXQgXGIgaW0gcmVnZXggbmljaHQgVW1sYXV0ZSB1bmQg3yBtYXRjaHQuCit1c2UgUE9TSVggcXcobG9jYWxlX2gpOyAgICAgIyB0byBiZSBhYmxlIHRvIHVzZSBzZXRsb2NhbGUoKQorI3NldGxvY2FsZShMQ19BTEwsJ2RlX0RFJyk7ICAKK3NldGxvY2FsZShMQ19BTEwsICJmaV9GSSIpOyAgCit1c2UgdXRmODsKK3VzZSBvcGVuIHF3KCA6c3RkIDplbmNvZGluZyhVVEYtOCkgKTsKKwordXNlIFRpbWU6OlBpZWNlOwordXNlIFRpZTo6SXhIYXNoOworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjaGVjayBmaWxlIGFyZ3VtZW50czoKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgYXJnMCBpbmZpbGU6ICAgdnJ0LXhtbAorIyBhcmcxIG91dGZpbGU6ICB0ZWkKKwordW5sZXNzKCRBUkdWWzFdKSB7JnVzYWdlX21lc3NhZ2UoKX07ICMgbWluIGFyZzAgdW5kIGFyZzEKK2lmICgkQVJHVlsyXSkgeyZ1c2FnZV9tZXNzYWdlKCl9OyAgICAjIG1heCBhcmcxCisKKworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEdMT0JBTCBWQVJJQUJMRVMgCisjIyMjIyMjIyMjIyMjIyMjIyMjIworCitteSAkZW5jb2RpbmcgPSAiVVRGLTgiOyAgICAgICAgICAgICAgIAorI215ICRlbmNvZGluZyA9ICJpc28tODg1OS0xIjsgICAgICAgICAgICAgIyBkaWVzZXMgJGVuY29kaW5nIGlzdCBOVVIgZnVlciBkYXMgb3V0cHV0IHMudS4gdHdpZyBmdW5rdGlvbgorCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICAgICBNIEEgSSBOICAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKKyMgb3BlbiByZXN1bHQgZmlsZSBhbmQgaW5pdGlhbGlzZSBmaWxlaGFuZGxlCitvcGVuKG15ICRPVVQsICI+PiAkQVJHVlsxXSIpIHx8IGRpZSgiY2Fubm90IG9wZW4gZmlsZTogJEFSR1ZbMV0iKTsgCisKKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgc3RhcnQgdHdpZyBhbmQgY2FsbCBzdGFydCB0YWcgaGFuZGxlciBmb3Igcm9vdCBhbmQgdHdpZyBoYW5kbGVyIGZvciBlYWNoIDx0ZXh0PgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK215ICR0d2lnPSIiOyAgIAorCiskdHdpZyA9IG5ldyBYTUw6OlR3aWcoCisgICAga2VlcF9zcGFjZXMgPT4gMSwgICAgICAgICAgICMgZGFkdXJjaCBhdWNoIHdoaXRlc3BhY2VzIGFuIGVoZW1lbGlnZW4gZWxlbWVudGdyZW56ZW4gaW0gb3V0cHV0CisgICAga2VlcF9hdHRzX29yZGVyID0+IDEsICAgICAgICMgcmVxdWlyZXMgVGllOjpJeEhhc2gKKyAgICBwcmV0dHlfcHJpbnQgPT4gJ2luZGVudGVkJywKKyAgICBzdGFydF90YWdfaGFuZGxlcnMgPT4geworICAgIAl0ZXh0cyA9PiBcJnJvb3QKKyAgICB9LAorICAgIHR3aWdfaGFuZGxlcnMgPT4gIHsKKwl0ZXh0ID0+IFwmdGV4dAorICAgIH0sCisgICAgIyBkdGRfaGFuZGxlcnMgPT4gICB7ICAgICAgICMgVG9EbyBmb3IgSTUKKyAgICAjCVwmc2V0X2R0ZDsKKyAgICAjIH0KKyAgICBvdXRwdXRfZW5jb2RpbmcgPT4gJGVuY29kaW5nLAorICAgICk7CisKKyR0d2lnLT5wYXJzZWZpbGUoJEFSR1ZbMF0pOworCitjbG9zZSgkT1VUKTsKKworCisjIyMjIyMjIyMjIworIyBFTkQgTUFJTgorIyMjIyMjIyMjIyMKKworCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICAgUyBVIEIgUiBPIFUgVCBJIE4gRSBTCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBzdWIgc2V0X2R0ZCBbCisjICAgIG15ICR0d2lnLCAkZHRkID0gQF87CisjICAgIG15ICRpbnRlcm5hbCA9IHFxfFxuUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiJcbiJEVEQveGh0bWwxLXN0cmljdC5kdGQifDsKKyMKKyMgICAgJHR3aWctPnR3aWdfZG9jdHlwZSgnaHRtbCcsIHVuZGVmLCB1bmRlZiwgJGludGVybmFsKTsKKyMgICAgfQorCisKKworc3ViIHJvb3QgeworICAgIG15ICgkdHdpZywgJHJvb3QpID1AXzsKKworICAgICRyb290LT5zZXRfZ2koJ3RlaUNvcnB1cycpOworICAgICRyb290LT5zZXRfYXR0KCJ4bWxucyIsICdodHRwOi8vd3d3LnRlaS1jLm9yZy9ucy8xLjAnKTsKKworICAgICZpbnNlcnRDb3JwdXNIZWFkZXIoJHJvb3QpOyAgICAKK30KKworCitzdWIgaW5zZXJ0Q29ycHVzSGVhZGVyeworICAgIG15ICgkcm9vdCkgPUBfOworCisgICAgbXkgJHRlaUhlYWRlciAgICAgICAgPSAkcm9vdCAgICAgICAgICAgLT5pbnNlcnRfbmV3X2VsdCgiZmlyc3RfY2hpbGQiLCAndGVpSGVhZGVyJyk7ICAgIAorICAgIG15ICRmaWxlRGVzYyAgICAgICAgID0gJHRlaUhlYWRlciAgICAgIC0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAnZmlsZURlc2MnKTsKKworICAgIG15ICR0aXRsZVN0bXQgICAgICAgID0gJGZpbGVEZXNjICAgICAgIC0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAndGl0bGVTdG10Jyk7CisgICAgbXkgJHRpdGxlICAgICAgICAgICAgPSAkdGl0bGVTdG10ICAgICAgLT5pbnNlcnRfbmV3X2VsdCgibGFzdF9jaGlsZCIsICd0aXRsZScpOworICAgICR0aXRsZSAgICAgICAgICAgICAgIC0+c2V0X3RleHQoIiBLTEstZmktMjAyMSBmb3IgRXVSZUNvIik7CisgICAgCisgICAgbXkgJHB1YmxpY2F0aW9uU3RtdCAgPSAkZmlsZURlc2MgICAgICAgLT5pbnNlcnRfbmV3X2VsdCgibGFzdF9jaGlsZCIsICdwdWJsaWNhdGlvblN0bXQnKTsKKyAgICBteSAkZGlzdHJpYnV0b3IgICAgICA9ICRwdWJsaWNhdGlvblN0bXQtPmluc2VydF9uZXdfZWx0KCJsYXN0X2NoaWxkIiwgJ2Rpc3RyaWJ1dG9yJyk7CisgICAgJGRpc3RyaWJ1dG9yICAgICAgICAgLT5zZXRfdGV4dCgiTk9UIEZPUiBESVNUUklCVVRJT04gLSB0byBiZSB1c2VkIGxvY2FsbHkgaW4gRXVSZUNvIik7CisKKyAgICBteSAkc291cmNlRGVzYyAgICAgICA9ICRmaWxlRGVzYyAgICAgICAtPmluc2VydF9uZXdfZWx0KCJsYXN0X2NoaWxkIiwgJ3NvdXJjZURlc2MnKTsKKyAgICBteSAkYmlibCAgICAgICAgICAgICA9ICRzb3VyY2VEZXNjICAgICAtPmluc2VydF9uZXdfZWx0KCJsYXN0X2NoaWxkIiwgJ2JpYmwnKTsKKyAgICAkYmlibCAgICAgICAgICAgICAgICAtPnNldF90ZXh0KCJUb0RvIik7CisKK30KKyAgICAKKyAgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGhhbmRsZXIgJnRleHQgZm9yIDx0ZXh0PgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3ViIHRleHQgeworCisgICAgbXkgKCR0d2lnLCAkdGV4dCkgPSBAXzsKKworICAgICMgVG9EbzogY2F0Y2ggYWxsIG90aGVyLCB1bmV4cGVjdGVkIGNoaWxkcmVuCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIEdldCB0ZXh0IG1ldGFkYXRhIChhdHRyaWJ1dGVzIG9mIDx0ZXh0PikgYW5kIGNyZWF0ZSB0ZWlIZWFkZXIgZm9yIDx0ZXh0PgorICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIG15ICR0ZXh0YXR0c3JlZiA9ICR0ZXh0LT5hdHRzKCk7ICAgICAgICAgICAgICAgIyAkdGV4dGF0dHNyZWYgaXMgbm93IGEgcmVmZXJlbmNlIHRvIGEgaGFzaCBhbmQgc2hvdWxkIGJlIHVzZWQgd2l0aCAnLT4nCisKKyAgICAmY3JlYXRlVGV4dEhlYWRlcigkdGV4dCwgJHRleHRhdHRzcmVmKTsKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgY3JlYXRlIDxURUk+IGZyb20gPHRleHQ+CisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgIyBzZXQgdnJ0IDx0ZXh0PiB0byA8VEVJPiBhbmQgZGVsZXRlIGFsbCBhdHRyaWJ1dGVzIGFmdGVyIHRoZXkgd2VyZSB3ZXJlIHNhdmVkIGFib3ZlCisgICAgJHRleHQtPmRlbF9hdHRzOworICAgICR0ZXh0LT5zZXRfZ2koIlRFSSIpOworCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgY3JlYXRlIHRoZSA8dGVpOnRleHQ+LCA8Ym9keT4sIDxkaXY+IGVsZW1lbnRzIGluc2lkZSA8VEVJPgorICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICBteSAkdHRleHRfZWxlbWVudCA9IFhNTDo6VHdpZzo6RWx0LT5uZXcoJ3RleHQnKTsKKyAgICBteSAkYm9keV9lbGVtZW50ICA9IFhNTDo6VHdpZzo6RWx0LT5uZXcoJ2JvZHknKTsKKyAgICBteSAkZGl2X2VsZW1lbnQgICA9IFhNTDo6VHdpZzo6RWx0LT5uZXcoJ2RpdicpOworCisgICAgIyBzZXQgYXR0cworICAgICRkaXZfZWxlbWVudC0+c2V0X2F0dCgidHlwZSIsICJwYWdlIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRvRG86IHRoaXMgaXMgc3BlY2lmaWMgdG8gS0xLCisKKyAgICAjIHBhc3RlCisgICAgJHR0ZXh0X2VsZW1lbnQtPnBhc3RlKCdsYXN0X2NoaWxkJywgICR0ZXh0KTsKKyAgICAkYm9keV9lbGVtZW50IC0+cGFzdGUoJ2xhc3RfY2hpbGQnLCAgJHR0ZXh0X2VsZW1lbnQpOworICAgICRkaXZfZWxlbWVudCAgLT5wYXN0ZSgnbGFzdF9jaGlsZCcsICAkYm9keV9lbGVtZW50KTsKKworICAgIAorICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBjcmVhdGUgPHA+IGZyb20gPHBhcmFncmFwaD4KKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIG15IEBwYXJhZ3JhcGhzID0gJHRleHQtPmNoaWxkcmVuKCAncGFyYWdyYXBoJyk7CisKKyAgICBmb3JlYWNoIG15ICRwYXJhZ3JhcGggKEBwYXJhZ3JhcGhzKSB7CisJCisJJnNldFAoJHBhcmFncmFwaCk7CisKKwkkcGFyYWdyYXBoLT5tb3ZlKCdsYXN0X2NoaWxkJywgJGRpdl9lbGVtZW50KTsKKwkKKwkKKwkjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJIyBjcmVhdGUgPHM+IGZyb20gPHNlbnRlbmNlPgorCSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkKKwlteSBAc2VudGVuY2VzID0gJHBhcmFncmFwaC0+Y2hpbGRyZW4oJ3NlbnRlbmNlJyk7CisJZm9yZWFjaCBteSAkc2VudGVuY2UgKEBzZW50ZW5jZXMpIHsKKworCSAgICAmc2V0Uygkc2VudGVuY2UpOworCisKKwkgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgICMgY3JlYXRlIDx3PiAod29yZCkgZnJvbSBlYWNoICRsaW5lCisJICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgICAKKwkgICAgbXkgQGxpbmVzID0gc3BsaXQoL1xuKy8sICRzZW50ZW5jZS0+eG1sX3RleHQpOworCSAgICAkc2VudGVuY2UtPnNldF90ZXh0KCJcbiIpOworCisJICAgIGZvciBteSAkbGluZSAoQGxpbmVzKXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRvZG86IFJlaWhlbmZvbGdlIGNoZWNrZW4KKwkJaWYoJGxpbmUgbmUgIiIgKXsKKwkJICAgIG15ICR3X2VsZW1lbnQgPSBYTUw6OlR3aWc6OkVsdC0+bmV3KCd3Jyk7CisJCSAgICAmY3JlYXRlVygkd19lbGVtZW50LCAkbGluZSk7CisJCSAgICAkd19lbGVtZW50LT5wYXN0ZSgnbGFzdF9jaGlsZCcsICRzZW50ZW5jZSk7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAkdHdpZy0+Zmx1c2goJE9VVCk7ICAgIAorfQorCisKK3N1YiBjcmVhdGVUZXh0SGVhZGVyeworICAgIG15ICgkdGV4dCwgJHRleHRhdHRzcmVmKSA9IEBfOworICAgIAorICAgICMgVVNFIDAxIGJpbmRpbmdfaWQ9IjIyNDYwMjUiCisgICAgIyBVU0UgMDIgZGF0ZT0iMjAyMS0wMS0xNSIKKyAgICAjICAgICAwMyBkYXRlZnJvbT0iMjAyMTAxMTUiCisgICAgIyAgICAgMDQgZGF0ZXRvPSIyMDIxMDExNSIKKyAgICAjICAgICAwNSBlbGVjX2RhdGU9Il8iCisgICAgIyAgICAgMDYgZmlsZT0iIgorICAgICMgVVNFIDA3IGZpbGVuYW1lX21ldGFkYXRhPSJmaW5jbGFyaW5fc2lpcnRvX2syMDIxLzAwMzktNTU1Mi8yMDIxL2FsdG8vMjI0NjAyNV8wMDM5LTU1NTJfMjAyMS0wMS0xNV9TSzAyMjFfbWV0cy54bWwiCisgICAgIyBVU0UgMDggZmlsZW5hbWVfb3JpZyAgICA9ImZpbmNsYXJpbl9zaWlydG9fazIwMjEvMDAzOS01NTUyLzIwMjEvYWx0by8yMjQ2MDI1XzAwMzktNTU1Ml8yMDIxLTAxLTE1X1NLMDIyMV9wYWdlLTIwMjEwMTE1MDIyMTAwMzAzMDEueG1sCisgICAgIyBVU0UgMDkgaWQ9InQtYmNkMGYzZmEtYmJkM2RhYzQiCisgICAgIyAgICAgMTAgaW1nX3VybD0iIgorICAgICMgVVNFIDExIGlzc3VlX2RhdGU9IjE1LjAxLjIwMjEiCisgICAgIyBVU0UgMTIgaXNzdWVfbm89IlNLMDIyMSIKKyAgICAjIFVTRSAxMyBpc3N1ZV90aXRsZT0iU3VvbWVuIEt1dmFsZWh0aSIKKyAgICAjIFVTRSAxNCBsYWJlbD0iU3VvbWVuIEt1dmFsZWh0aSBuby4gU0swMjIxIDE1LjAxLjIwMjEiCisgICAgIyBVU0UgMTYgbGFuZ3VhZ2U9ImZpIgorICAgICMgVVNFIDE3IHBhZ2VfaWQ9InAxIgorICAgICMgVVNFIDE4IHBhZ2Vfbm89Ik5vbmUiCisgICAgIyAgICAgMTkgcGFydF9uYW1lPSJfIgorICAgICMgICAgIDIwIHB1YmxfaWQ9IjAwMzktNTU1MiIKKyAgICAjICAgICAyMSBwdWJsX3BhcnQ9IiIKKyAgICAjIFVTRSAyMiBwdWJsX3RpdGxlPSJTdW9tZW4gS3V2YWxlaHRpIiAKKyAgICAjIFVTRSAyMyBwdWJsX3R5cGU9ImFpa2FrYXVzaSIKKyAgICAjIFVTRSAyNCBzZW50Y291bnQ9IjcwIgorICAgICMgVVNFIDI1IHN1bV9sYW5nPSJ8eHh4OjQ0fGZpbjoyM3xlbmc6M3wiCisgICAgIyAgICAgMjYgdGltZWZyb209IjAwMDAwMCIKKyAgICAjICAgICAyNyB0aW1ldG89IjIzNTk1OSIKKyAgICAjIFVTRSAyOCB0b2tlbmNvdW50PSIzMDQiCisgICAgIyAgICAgMjkgdmVyc2lvbl9hZGRlZD0iS0xLLWZpLTIwMjEiPgorCisKKyAgICBteSAkQklEICAgICAgICAgID0gJHRleHRhdHRzcmVmLT57J2JpbmRpbmdfaWQnfTsKKyAgICBteSAkREFURSAgICAgICAgID0gJHRleHRhdHRzcmVmLT57J2RhdGUnfTsKKyAgICBteSAkTUVUQUZJTEVOQU1FID0gJHRleHRhdHRzcmVmLT57J2ZpbGVuYW1lX21ldGFkYXRhJ307ICAgIAorICAgIG15ICRPUklHRklMRU5BTUUgPSAkdGV4dGF0dHNyZWYtPnsnZmlsZW5hbWVfb3JpZyd9OworICAgIG15ICRJRCAgICAgICAgICAgPSAkdGV4dGF0dHNyZWYtPnsnaWQnfTsKKyAgICBteSAkSVNTVUVEQVRFICAgID0gJHRleHRhdHRzcmVmLT57J2lzc3VlX2RhdGUnfTsKKyAgICBteSAkSVNTVUVOTyAgICAgID0gJHRleHRhdHRzcmVmLT57J2lzc3VlX25vJ307CisgICAgbXkgJElTU1VFVElUTEUgICA9ICR0ZXh0YXR0c3JlZi0+eydpc3N1ZV90aXRsZSd9OworICAgIG15ICRMQUJFTCAgICAgICAgPSAkdGV4dGF0dHNyZWYtPnsnbGFiZWwnfTsKKyAgICBteSAkTEFOR1VBR0UgICAgID0gJHRleHRhdHRzcmVmLT57J2xhbmd1YWdlJ307CisgICAgbXkgJFBBR0VJRCAgICAgICA9ICR0ZXh0YXR0c3JlZi0+eydwYWdlX2lkJ307CisgICAgbXkgJFBBR0VOTyAgICAgICA9ICR0ZXh0YXR0c3JlZi0+eydwYWdlX25vJ307CisgICAgbXkgJFBVQkxUSVRMRSAgICA9ICR0ZXh0YXR0c3JlZi0+eydwdWJsX3RpdGxlJ307CisgICAgbXkgJFBVQkxUWVBFICAgICA9ICR0ZXh0YXR0c3JlZi0+eydwdWJsX3R5cGUnfTsKKyAgICBteSAkU0VOVENPVU5UICAgID0gJHRleHRhdHRzcmVmLT57J3NlbnRjb3VudCd9OworICAgIG15ICRTVU1MQU5HICAgICAgPSAkdGV4dGF0dHNyZWYtPnsnc3VtX2xhbmcnfTsKKyAgICBteSAkVE9LRU5DT1VOVCAgID0gJHRleHRhdHRzcmVmLT57J3Rva2VuY291bnQnfTsKKworICAgIAorICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgRGVyaXZlZCBNZXRhZGF0YSB2YXJpYWJsZXMKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIG15IEBkYXRlYXJyYXkgPSBzcGxpdCgiLSIsICREQVRFKTsKKyAgICBteSBAbGFuZ2FycmF5ID0gc3BsaXQoInwiLCAkU1VNTEFORyk7CisgICAgbXkgQG5hbWVhcnJheSA9IHNwbGl0KC9bXC5cL10vLCAkT1JJR0ZJTEVOQU1FKTsgICMgdXNlICRuYW1lYXJyYXlbNF0gYXMgSUQgZm9yIHRoZSBwYWdlCisgICAgCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIENSRUFURSB0ZXh0LXRlaUhlYWRlciBBQ0NPUkRJTkcgVE8gVEhFIFNLRUxFVE9OIGluIGtsay1oZWFkZXIudGVpLnhtbAorICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgIyBjcmVhdGUgPHRlaUhlYWRlcj4gaW5zaWRlIDxURUk+CisgICAgbXkgJHRlaUhlYWRlciA9IFhNTDo6VHdpZzo6RWx0LT5uZXcoJ3RlaUhlYWRlcicpOworICAgICR0ZWlIZWFkZXItPnBhc3RlKCdmaXJzdF9jaGlsZCcsICR0ZXh0KTsKKworICAgICMjIGluc2VydF9uZXdfZWx0IGlzIGEgY29tYm8gb2YgbmV3IGFuZCBwYXN0ZSwgY2YuIHhtbDo6dHdpZyBkb2N1OgorICAgICMjIGluc2VydF9uZXdfZWx0ICgkb3B0X3Bvc2l0aW9uLCAkZ2ksICRvcHRfYXR0c19oYXNocmVmLCBAb3B0X2NvbnRlbnQpCisgICAgCisgICAgbXkgJGZpbGVEZXNjICAgICA9ICR0ZWlIZWFkZXItPmluc2VydF9uZXdfZWx0KCdmaWxlRGVzYycgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiB7biA9PiAiRXVSZUNvX0tMSy1maV8iIC4gJG5hbWVhcnJheVs0XX0pOworICAgIG15ICRlbmNvZGluZ0Rlc2MgPSAkdGVpSGVhZGVyLT5pbnNlcnRfbmV3X2VsdCgibGFzdF9jaGlsZCIsICdlbmNvZGluZ0Rlc2MnKTsKKyAgICBteSAkcHJvZmlsZURlc2MgID0gJHRlaUhlYWRlci0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAncHJvZmlsZURlc2MnKTsKKyAgICBteSAkcmV2aXNpb25EZXNjID0gJHRlaUhlYWRlci0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAncmV2aXNpb25EZXNjJyk7CisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBmaWxlRGVzYy90aXRsZVN0bXQKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgbXkgJHRpdGxlU3RtdCA9ICRmaWxlRGVzYyAtPmluc2VydF9uZXdfZWx0KCd0aXRsZVN0bXQnKTsKKyAgICBteSAkdGl0bGUgICAgID0gJHRpdGxlU3RtdC0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAndGl0bGUnKTsKKyAgICBteSAkcmVzcFN0bXQgID0gJHRpdGxlU3RtdC0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAncmVzcFN0bXQnKTsKKyAgICBteSAkcmVzcCAgICAgID0gJHJlc3BTdG10IC0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAncmVzcCcpOworICAgIG15ICRuYW1lICAgICAgPSAkcmVzcFN0bXQgLT5pbnNlcnRfbmV3X2VsdCgibGFzdF9jaGlsZCIsICduYW1lJyk7CisKKyAgICAjIHNldCB0ZXh0cyBmb3IgdGl0bGVTdG10CisgICAgJHRpdGxlLT5zZXRfdGV4dCgkTEFCRUwgLiAiLCBwYWdlICIgLiAkUEFHRU5PKTsgICAgIyBBY2h0dW5nIC0gUEFHRU5PIHNjaGVpbnQgbWVpc3QgIk5vbmUiIHp1IHNlaW4KKyAgICAkcmVzcCAtPnNldF90ZXh0KCJjb21waWxlZCBieSBFdVJlQ28iKTsKKyAgICAkbmFtZSAtPnNldF90ZXh0KCJFdVJlQ286IEhMIik7CisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGZpbGVEZXNjL3B1YmxpY2F0aW9uU3RtdAorICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIG15ICRwdWJsaWNhdGlvblN0bXQgPSAkZmlsZURlc2MgICAgICAgLT5pbnNlcnRfbmV3X2VsdCgibGFzdF9jaGlsZCIsICdwdWJsaWNhdGlvblN0bXQnKTsKKyAgICBteSAkZGlzdHJpYnV0b3IgICAgID0gJHB1YmxpY2F0aW9uU3RtdC0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAnZGlzdHJpYnV0b3InKTsKKyAgICBteSAkbm90ZSAgICAgICAgICAgID0gJGRpc3RyaWJ1dG9yICAgIC0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAnbm90ZScpOworICAgIG15ICRhdmFpbGFiaWxpdHkgICAgPSAkcHVibGljYXRpb25TdG10LT5pbnNlcnRfbmV3X2VsdCgibGFzdF9jaGlsZCIsICdhdmFpbGFiaWxpdHknKTsgCisgICAgbXkgJGxpY2VuY2UgICAgICAgICA9ICRhdmFpbGFiaWxpdHkgICAtPmluc2VydF9uZXdfZWx0KCJsYXN0X2NoaWxkIiwgJ2xpY2VuY2UnKTsKKworICAgICMgc2V0IHRleHRzIGZvciBwdWJsaWNhdGlvblN0bXQKKyAgICAkbm90ZSAgIC0+c2V0X3RleHQoIk5PVCBGT1IgRElTVFJJQlVUSU9OIC0gdG8gYmUgdXNlZCBsb2NhbGx5IGluIEV1UmVDbyIpOworICAgICRsaWNlbmNlLT5zZXRfdGV4dCgiQ0xBUklOLVJFUyIpOyAgIyBUT0RPOiBBdXNmdWhlcmxpY2hlcmUgTGljZW5jZSBpbmZvIGluIEtMSyBNZXRhZGF0YSBSZWNvcmQKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGZpbGVEZXNjL3NvdXJjZURlc2MvYmlibFN0cnVjdAorICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBteSAkc291cmNlRGVzYyA9ICRmaWxlRGVzYyAgLT5pbnNlcnRfbmV3X2VsdCgibGFzdF9jaGlsZCIsICdzb3VyY2VEZXNjJyk7CisgICAgbXkgJGJpYmxTdHJ1Y3QgICA9ICRzb3VyY2VEZXNjLT5pbnNlcnRfbmV3X2VsdCgibGFzdF9jaGlsZCIsICdiaWJsU3RydWN0Jyk7CisKKyAgICAjIGZpbGVEZXNjL3NvdXJjZURlc2MvYmlibFN0cnVjdC9hbmFseXRpYworICAgIG15ICRhbmFseXRpYyAgICAgICAgICAgICAgICA9ICRiaWJsU3RydWN0LT5pbnNlcnRfbmV3X2VsdCgibGFzdF9jaGlsZCIsICdhbmFseXRpYycpOworICAgIG15ICRhbmFseXRpY190aXRsZSAgICAgICAgICA9ICRhbmFseXRpYy0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAndGl0bGUnICAgICAgICA9PiB7dHlwZSA9PiAibWFpbiJ9ICk7CisjICAgIG15ICRhbmFseXRpY19kYXRlICAgICAgICAgICA9ICRhbmFseXRpYy0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAnZGF0ZScpOworICAgIG15ICRhbmFseXRpY19kYXRlX3llYXIgICAgICA9ICRhbmFseXRpYy0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAnZGF0ZScgICAgICAgICA9PiB7dHlwZSA9PiAieWVhciJ9KTsKKyAgICBteSAkYW5hbHl0aWNfZGF0ZV9tb250aCAgICAgPSAkYW5hbHl0aWMtPmluc2VydF9uZXdfZWx0KCJsYXN0X2NoaWxkIiwgJ2RhdGUnICAgICAgICAgPT4ge3R5cGUgPT4gIm1vbnRoIn0pOworICAgIG15ICRhbmFseXRpY19kYXRlX2RheSAgICAgICA9ICRhbmFseXRpYy0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAnZGF0ZScgICAgICAgICA9PiB7dHlwZSA9PiAiZGF5In0pOworICAgIG15ICRhbmFseXRpY19pZG5vX3BhZ2VpZCAgICA9ICRhbmFseXRpYy0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAnaWRubycgICAgICAgICA9PiB7dHlwZSA9PiAiUEFHRUlEIn0pOworICAgIG15ICRhbmFseXRpY19pZG5vX2JpbmRpbmdpZCA9ICRhbmFseXRpYy0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAnaWRubycgICAgICAgICA9PiB7dHlwZSA9PiAiQklORElOR0lEIn0pOworICAgIG15ICRhbmFseXRpY19pZG5vX2lkICAgICAgICA9ICRhbmFseXRpYy0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAnaWRubycgICAgICAgICA9PiB7dHlwZSA9PiAiSUQifSk7CisgICAgbXkgJGFuYWx5dGljX2lkbm9fbWV0YWZpbGUgID0gJGFuYWx5dGljLT5pbnNlcnRfbmV3X2VsdCgibGFzdF9jaGlsZCIsICdpZG5vJyAgICAgICAgID0+IHt0eXBlID0+ICJLSUVMSVBBTktLSV9NRVRBRklMRU5BTUUifSk7CisgICAgbXkgJGFuYWx5dGljX2lkbm9fb3JpZ2ZpbGUgID0gJGFuYWx5dGljLT5pbnNlcnRfbmV3X2VsdCgibGFzdF9jaGlsZCIsICdpZG5vJyAgICAgICAgID0+IHt0eXBlID0+ICJLSUVMSVBBTktLSV9PUklHRklMRU5BTUUifSk7CisgICAgbXkgJGFuYWx5dGljX3RleHRsYW5nICAgICAgID0gJGFuYWx5dGljLT5pbnNlcnRfbmV3X2VsdCgibGFzdF9jaGlsZCIsICd0ZXh0TGFuZycpOworCisgICAgIyBzZXQgdGV4dHMgZm9yIGFuYWx5dGljCisgICAgJGFuYWx5dGljX3RpdGxlICAgICAgICAgLT5zZXRfdGV4dCgkTEFCRUwgLiAiLCBwYWdlICIgLiAkUEFHRU5PKTsgICMgQWNodHVuZyAkUEFHRU5PIHNjaGVpbnQgbWVpc3QgIk5vbmUgenUgc2VpbiIKKyMgICAgJGFuYWx5dGljX2RhdGUgICAgICAgICAtPnNldF90ZXh0KCREQVRFKTsKKyAgICAkYW5hbHl0aWNfZGF0ZV95ZWFyICAgICAtPnNldF90ZXh0KCRkYXRlYXJyYXlbMF0pOworICAgICRhbmFseXRpY19kYXRlX21vbnRoICAgIC0+c2V0X3RleHQoJGRhdGVhcnJheVsxXSk7CisgICAgJGFuYWx5dGljX2RhdGVfZGF5ICAgICAgLT5zZXRfdGV4dCgkZGF0ZWFycmF5WzJdKTsKKyAgICAkYW5hbHl0aWNfaWRub19wYWdlaWQgICAtPnNldF90ZXh0KCRQQUdFSUQpOworICAgICRhbmFseXRpY19pZG5vX2JpbmRpbmdpZC0+c2V0X3RleHQoJEJJRCk7CisgICAgJGFuYWx5dGljX2lkbm9faWQgICAgICAgLT5zZXRfdGV4dCgkSUQpOworICAgICRhbmFseXRpY19pZG5vX21ldGFmaWxlIC0+c2V0X3RleHQoJE1FVEFGSUxFTkFNRSk7CisgICAgJGFuYWx5dGljX2lkbm9fb3JpZ2ZpbGUgLT5zZXRfdGV4dCgkT1JJR0ZJTEVOQU1FKTsKKyAgICAkYW5hbHl0aWNfdGV4dGxhbmcgICAgICAtPnNldF90ZXh0KCRMQU5HVUFHRSk7CisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAKKyAgICAjIGZpbGVEZXNjL3NvdXJjZURlc2MvYmlibFN0cnVjdC9tb25vZ3IKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIG15ICRtb25vZ3IgICAgICAgICAgICAgICA9ICRiaWJsU3RydWN0LT5pbnNlcnRfbmV3X2VsdCgibGFzdF9jaGlsZCIsICdtb25vZ3InKTsKKyAgICBteSAkbW9ub2dyX3RpdGxlICAgICAgICAgPSAkbW9ub2dyICAgIC0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAndGl0bGUnKTsKKyAgICBteSAkaW1wcmludCAgICAgICAgICAgICAgPSAkbW9ub2dyICAgIC0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAnaW1wcmludCcpOyAgICMgaW1wcmludCBpcyBuZWVkZWQgZm9yIHZhbGlkaWR0eQorICAgIG15ICRwdWJQbGFjZSAgICAgICAgICAgICA9ICRpbXByaW50ICAgLT5pbnNlcnRfbmV3X2VsdCgibGFzdF9jaGlsZCIsICdwdWJQbGFjZScpOyAgIyBpbXByaW50IGlzIG5lZWRlZCBmb3IgdmFsaWRpdHkKKyAgICBteSAkcHVibGlzaGVyICAgICAgICAgICAgPSAkaW1wcmludCAgIC0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAncHVibGlzaGVyJyk7ICMgaW1wcmludCBpcyBuZWVkZWQgZm9yIHZhbGlkaXR5CisgICAgbXkgJGJpYmxTY29wZV9pc3N1ZXRpdGxlID0gJG1vbm9nciAgICAtPmluc2VydF9uZXdfZWx0KCJsYXN0X2NoaWxkIiwgJ2JpYmxTY29wZScgICA9PiB7dW5pdCA9PiAnSVNTVUVUSVRMRSd9ICk7CisgICAgbXkgJGJpYmxTY29wZV9pc3N1ZW5vICAgID0gJG1vbm9nciAgICAtPmluc2VydF9uZXdfZWx0KCJsYXN0X2NoaWxkIiwgJ2JpYmxTY29wZScgICA9PiB7dW5pdCA9PiAnSVNTVUVOTyd9ICk7CisgICAgbXkgJGJpYmxTY29wZV9pc3N1ZWRhdGUgID0gJG1vbm9nciAgICAtPmluc2VydF9uZXdfZWx0KCJsYXN0X2NoaWxkIiwgJ2JpYmxTY29wZScgICA9PiB7dW5pdCA9PiAnSVNTVUVEQVRFJ30gKTsKKyAgICBteSAkYmlibFNjb3BlX3BwICAgICAgICAgPSAkbW9ub2dyICAgIC0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAnYmlibFNjb3BlJyAgID0+IHt1bml0ID0+ICdQQUdFTk8nfSApOyAgICAgICMgQWNodHVuZyBQQUdFTk8gaXN0IG1laXN0ICJOb25lIiA/CisKKyAgICAjIHNldCB0ZXh0cyBmb3IgbW9ub2dyCisgICAgJG1vbm9ncl90aXRsZSAgICAgICAgLT5zZXRfdGV4dCgkUFVCTFRJVExFKTsKKyAgICAkcHViUGxhY2UgICAgICAgICAgICAtPnNldF90ZXh0KCJUT0RPIik7CisgICAgJHB1Ymxpc2hlciAgICAgICAgICAgLT5zZXRfdGV4dCgiVE9ETyIpOworICAgICRiaWJsU2NvcGVfaXNzdWV0aXRsZS0+c2V0X3RleHQoJElTU1VFVElUTEUpOworICAgICRiaWJsU2NvcGVfaXNzdWVubyAgIC0+c2V0X3RleHQoJElTU1VFTk8pOworICAgICRiaWJsU2NvcGVfaXNzdWVkYXRlIC0+c2V0X3RleHQoJElTU1VFREFURSk7CisgICAgJGJpYmxTY29wZV9wcCAgICAgICAgLT5zZXRfdGV4dCgkUEFHRU5PKTsKKyAKKyAgICAjLS0tLS0tLS0tLS0tLS0tCisgICAgIyBlbmNvZGluZ0Rlc2MKKyAgICAjLS0tLS0tLS0tLS0tLS0tCisgICAgbXkgJHRhZ3NEZWNsICAgICA9ICRlbmNvZGluZ0Rlc2MtPmluc2VydF9uZXdfZWx0KCJsYXN0X2NoaWxkIiwgJ3RhZ3NEZWNsJyk7CisgICAgbXkgJG5hbWVzcGFjZSAgICA9ICR0YWdzRGVjbCAgICAtPmluc2VydF9uZXdfZWx0KCJsYXN0X2NoaWxkIiwgJ25hbWVzcGFjZScgICAgPT4ge25hbWUgPT4gJ2h0dHA6Ly93d3cudGVpLWMub3JnL25zLzEuMCd9KTsKKyAgICBteSAkdGFnVXNhZ2VfcyAgID0gJG5hbWVzcGFjZSAgIC0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAndGFnVXNhZ2UnICAgICA9PiB7Z2kgICA9PiAncycsIG9jY3VycyA9PiAkU0VOVENPVU5UfSk7CisgICAgbXkgJHRhZ1VzYWdlX3cgICA9ICRuYW1lc3BhY2UgICAtPmluc2VydF9uZXdfZWx0KCJsYXN0X2NoaWxkIiwgJ3RhZ1VzYWdlJyAgICAgPT4ge2dpICAgPT4gJ3cnLCBvY2N1cnMgPT4gJFRPS0VOQ09VTlR9KTsKKyAgICAKKyAgICAjLS0tLS0tLS0tLS0tLQorICAgICMgcHJvZmlsZURlc2MKKyAgICAjLS0tLS0tLS0tLS0tLQorICAgIG15ICRsYW5nVXNhZ2UgICA9ICRwcm9maWxlRGVzYyAtPmluc2VydF9uZXdfZWx0KCJsYXN0X2NoaWxkIiwgJ2xhbmdVc2FnZScpOworICAgIG15ICRsYW5ndWFnZSAgICA9ICRsYW5nVXNhZ2UgICAtPmluc2VydF9uZXdfZWx0KCJsYXN0X2NoaWxkIiwgJ2xhbmd1YWdlJyAgICAgID0+IHtpZGVudCA9PiAkTEFOR1VBR0UsIHVzYWdlID0+ICRTVU1MQU5HfSk7CisgICAgIyBBY2h0dW5nIGluIEB1c2FnZSBtdXNzIGVpZ3QuIGVpbiBpbnRlZ2VyOyBhbSBiZXN0ZW4gaW5oYWx0IHZvbiBTVU1MQU5HIGF1ZmRyb2VzZWxuIHVuZCBtZWhyZXJlIDxsYW5ndWFnZT4gbWFjaGVuCisgICAgbXkgJHRleHRDbGFzcyAgID0gJHByb2ZpbGVEZXNjIC0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAndGV4dENsYXNzJyk7CisgICAgbXkgJGNsYXNzQ29kZV9maSAgID0gJHRleHRDbGFzcyAgIC0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAnY2xhc3NDb2RlJyA9PiB7c2NoZW1lICAgICAgID0+ICJLTEtfUFVCTFRZUEUifSk7CisjICAgIG15ICRjbGFzc0NvZGVfZW4gICA9ICR0ZXh0Q2xhc3MgICAtPmluc2VydF9uZXdfZWx0KCJsYXN0X2NoaWxkIiwgJ2NsYXNzQ29kZScgPT4ge3NjaGVtZSAgICAgID0+ICJLTEtfUFVCTFRZUEVfTUFQUEVEIn0pOworCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgc2V0IHRleHRzIGZvciBwcm9maWxlRGVzYworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAkY2xhc3NDb2RlX2ZpIC0+c2V0X3RleHQoJFBVQkxUWVBFKTsKKyMgICAgJGNsYXNzQ29kZV9lbi0+c2V0X3RleHQoJFBVQkxUWVBFVFJBTlNMKTsKKworICAgICMtLS0tLS0tLS0tLS0tLS0KKyAgICAjIHJldmlzaW9uRGVzYworICAgICMtLS0tLS0tLS0tLS0tLS0KKyAgICBteSAkY2hhbmdlICAgICAgPSAkcmV2aXNpb25EZXNjIC0+aW5zZXJ0X25ld19lbHQoImxhc3RfY2hpbGQiLCAnY2hhbmdlJyAgICAgICA9PiB7d2hlbiA9PiBsb2NhbHRpbWUtPnltZCgnLScpLCB3aG8gPT4gJ0hMJyAgfSk7CisKKyAgICAjIHNldCB0ZXh0cyBmb3IgcmV2aXNpb25EZXNjCisgICAgJGNoYW5nZS0+c2V0X3RleHQoIlRFSSB2ZXJzaW9uIGZvciBFdVJlQ28iKTsKKworCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIEVORCBPRiBDUkVBVElORyBURUlIRUFERVIKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgIAorfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitzdWIgc2V0UCB7CisgICAgbXkgKCRwYXJhZ3JhcGgpID0gQF87CisgICAgCisgICAgJHBhcmFncmFwaC0+c2V0X2dpKCdwJyk7CisgICAgCisgICAgIyA8cGFyYWdyYXBoIGlkPSJwLWJjZDBmM2ZhLWJiZDNkYWM0LTgxNWVhZDdhIiBzdW1fbGFuZz0ifGZpbjoxfCI+CisgICAgIyBhdHRzIG9mIDxwYXJhZ3JhcGg+OgorICAgICMgICAgQGlkICAgICAgICBVU0UKKyAgICAjICAgIEBzdW1fbGFuZyAgVVNFOiBwdXQgaW4geG1sOmxhbmcgYW5kIHByZWZpeCB0aGUgdmFsdWUgd2l0aCAieC0iIGZvciBwcml2YXRlIHZhbHVlCisgICAgCisgICAgJHBhcmFncmFwaC0+c2V0X2F0dCgieG1sOmxhbmciLCAieC0iIC4gJHBhcmFncmFwaC0+YXR0KCJzdW1fbGFuZyIpKTsKKyAgICAkcGFyYWdyYXBoLT5kZWxfYXR0KCJzdW1fbGFuZyIpOworICAgICRwYXJhZ3JhcGgtPmNoYW5nZV9hdHRfbmFtZSgnaWQnLCAneG1sOmlkJyk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitzdWIgc2V0UyB7CisgICAgbXkgKCRzZW50ZW5jZSkgPSBAXzsKKyAgICAKKyAgICAkc2VudGVuY2UtPnNldF9naSgncycpOworCSAgICAKKyAgICAjIHRoZSBhdHRzIG9mIDxzZW50ZW5jZT46CisgICAgIyAgICBVU0UgICAxIEBpZD0icy1iY2QwZjNmYS1iYmQzZGFjNC1mNzQyOTA5MCIKKyAgICAjICAgIFVTRSAgIDIgQGxhbmc9ImZpbiIgLT4geG1sOmxhbmcgCisgICAgIyAgICA/ICAgICAzIEBsYW5nX2NvbmY9IjAuNjczNDg1MyI+IC0+IFRvRG8gQGNlcnQgPwkgICAgCisgICAgCisgICAgIyBzZXQgYXR0cnMgb2YgPHM+CisgICAgJHNlbnRlbmNlLT5zZXRfYXR0KCJ4bWw6bGFuZyIsICRzZW50ZW5jZS0+YXR0KCJsYW5nIikpOyAgIyBUb0RvOiBjb252ZXJ0IHRoZSB2YWx1ZSAvIGludHJvZHVjZSBhIGhhc2ggZm9yIGxvb2t1cCAoaW5wdXQgdmFsdWVzOiAiZmluIiwgInh4eCIsIC4uLi4pCisgICAgJHNlbnRlbmNlLT5jaGFuZ2VfYXR0X25hbWUoJ2lkJywgJ3htbDppZCcpOworICAgICRzZW50ZW5jZS0+ZGVsX2F0dCgibGFuZyIpOyAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlcGxhY2VkIGJ5IHhtbDpsYW5nCisgICAgJHNlbnRlbmNlLT5kZWxfYXR0KCJsYW5nX2NvbmYiKTsgICAgICAgICAgICAgICAgICAgICMgZm9yIHRoZSB0aW1lIGJlaW5nCisgICAgCit9CisKK3N1YiBjcmVhdGVXIHsKKyAgICBteSAoJHdfZWxlbWVudCwgJGxpbmUpID0gQF87CisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBHZXQgdGhlIHRhZ3MgKD1jb2x1bW5zKQorICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICBteSBAdGFncyA9IHNwbGl0KC9cdC8sICRsaW5lKTsKKyAgICAKKyAgICAjIHNldCBjb250ZW50IG9mIDx3PiBpLmUuIHRoZSB0b2tlbgorICAgICR3X2VsZW1lbnQtPnNldF90ZXh0KCR0YWdzWzBdKTsKKyAgICAKKyAgICAjIHZydCBwb3NpdGlvbmFsLWF0dHJpYnV0ZXMgaW4gY29ycHVzIEtMSzoKKyAgICAjICBVU0UgWzBdIHdvcmQKKyAgICAjICBVU0UgWzFdIHJlZiAgKGlkIGZvciByZWZlcmVuY2Ugb2YgZGVwaGVhZCkKKyAgICAjICBVU0UgWzJdIGxlbW1hCisgICAgIyAgPyAgIFszXSBsZW1tYWNvbXAgICAobGVtbWEgd2l0aCBjb21wb3VuZCBpbmZvIC0gY291bGQgZ28gaW4gQG5vcm0sIGFzIHRhZyBhYnVzZT8pCisgICAgIyAgVVNFIFs0XSBwb3MgCisgICAgIyAgVVNFIFs1XSBtc2QgCisgICAgIyAgVVNFIFs2XSBkZXBoZWFkCisgICAgIyAgVVNFIFs3XSBkZXByZWwgCisgICAgIyAgICAgIFs4XSBjb250ZW50ICAgKG9jci1wcm9jZXNzKQorICAgICMgICAgICBbOV0gdnBvcyAgICAgIChvY3ItcHJvY2VzcykKKyAgICAjICAgICBbMTBdIG9jciAgICAgICAob2NyLXByb2Nlc3MpCisgICAgIyAgICAgWzExXSBjYyAgICAgICAgKG9jci1wcm9jZXNzKQorICAgICMgICAgIFsxMl0gaHlwaCAgICAgIChvY3ItcHJvY2VzcykKKyAgICAjICAgICBbMTNdIHN0eWxlICAgICAob2NyLXByb2Nlc3MpCisgICAgIyAgICAgWzE0XSBsZXggICAgICAgKGtvcnAgc2VtYW50aWMgZGlzYW1iaWd1YXRpb24gZnJvbSBHIm90ZWJvcmcpCisgICAgCisgICAgIyBzZXQgdGhlIGF0dHJpYnV0ZXMgb2YgPHc+OgorICAgICR3X2VsZW1lbnQtPnNldF9hdHQoIm4iLCAgICAgICR0YWdzWzFdKTsKKyAgICAjICR3X2VsZW1lbnQtPnNldF9hdHQoImlkIiwgICAgICJ3XyIgLiAkbmFtZWFycmF5WzRdIC4gJHNlbnRlbmNlLT5hdHQoInhtbDppZCIpIC4gIl8iIC4gJHRhZ3NbMV0pOworICAgICMgc28genVzYW1tZW5nZWJhdXRlIElEIGlzdCBhdWNoIG5pY2h0IGVpbmRldXRpZy4uLgorICAgICR3X2VsZW1lbnQtPmNoYW5nZV9hdHRfbmFtZSgnaWQnLCAneG1sOmlkJyk7CisgICAgJHdfZWxlbWVudC0+c2V0X2F0dCgibGVtbWEiLCAgJHRhZ3NbMl0pOworICAgICMgJHdfZWxlbWVudC0+c2V0X2F0dCgibm9ybSIsICAgJHRhZ3NbM10pOyAgIyB0YWcgYWJ1c2Ugb2YgQG5vcm0KKyAgICAkd19lbGVtZW50LT5zZXRfYXR0KCJwb3MiLCAgICAkdGFnc1s0XSk7CisgICAgJHdfZWxlbWVudC0+c2V0X2F0dCgibXNkIiwgICAgJHRhZ3NbNV0pOworICAgICR3X2VsZW1lbnQtPnNldF9hdHQoImhlYWQiLCAgICR0YWdzWzZdKTsKKyAgICAkd19lbGVtZW50LT5zZXRfYXR0KCJkZXByZWwiLCAkdGFnc1s3XSk7CisgICAgCit9CisgICAgCisjIyMjIyMjIyMjIyMjIyMjIworIyMgdXNhZ2VfbWVzc2FnZQorIyMjIyMjIyMjIyMjIyMjIyMKKworCitzdWIgdXNhZ2VfbWVzc2FnZSB7CisgICAgcHJpbnQgIiAgIFVzYWdlOiAgLi94bWwyaTUucGwgPGZpbGUudnJ0LnhtbD4gPG91dGZpbGU+XG4iOworICAgIHByaW50ICIgICA8ZmlsZS52cnQueG1sPiBpcyBhIFZSVCBmaWxlIGNvbnZlcnRlZCB0byBwcm9wZXIgWE1MXG4iOworICAgIGV4aXQ7Cit9CisKKwo=